@@ -3,11 +3,13 @@  | 
            ||
| 3 | 3 | 
                from __future__ import division  | 
            
| 4 | 4 | 
                 | 
            
| 5 | 5 | 
                import monetary  | 
            
| 6 | 
                +from django.conf import settings  | 
            |
| 7 | 
                +from django.db.models import Q  | 
            |
| 6 | 8 | 
                from django_logit import logit  | 
            
| 7 | 9 | 
                from django_response import response  | 
            
| 8 | 10 | 
                from paginator import pagination  | 
            
| 9 | 11 | 
                 | 
            
| 10 | 
                -from mch.models import AdministratorInfo, ModelInfo  | 
            |
| 12 | 
                +from mch.models import AdministratorInfo, ModelInfo, ModelCameraBodyInfo  | 
            |
| 11 | 13 | 
                from utils.error.errno_utils import AdministratorStatusCode, ProductModelStatusCode  | 
            
| 12 | 14 | 
                 | 
            
| 13 | 15 | 
                 | 
            
                @@ -155,3 +157,25 @@ def model_list(request):  | 
            ||
| 155 | 157 | 
                'count': count,  | 
            
| 156 | 158 | 
                'left': left,  | 
            
| 157 | 159 | 
                })  | 
            
| 160 | 
                +  | 
            |
| 161 | 
                +  | 
            |
| 162 | 
                +@logit  | 
            |
| 163 | 
                +def model_cameras(request):  | 
            |
| 164 | 
                +    brand_id = request.POST.get('brand_id', settings.KODO_DEFAULT_BRAND_ID)
               | 
            |
| 165 | 
                +  | 
            |
| 166 | 
                +    kw = request.POST.get('kw', '')
               | 
            |
| 167 | 
                +    page = request.POST.get('page', 1)
               | 
            |
| 168 | 
                +    num = request.POST.get('num', 20)
               | 
            |
| 169 | 
                +  | 
            |
| 170 | 
                + cameras = ModelCameraBodyInfo.objects.filter(brand_id=brand_id, status=True)  | 
            |
| 171 | 
                + if kw:  | 
            |
| 172 | 
                + cameras = cameras.filter(Q(model_name__contains=kw) | Q(model_full_name__contains=kw) | Q(camera_name__contains=kw))  | 
            |
| 173 | 
                + count = cameras.count()  | 
            |
| 174 | 
                + cameras, left = pagination(cameras, page, num)  | 
            |
| 175 | 
                + cameras = [camera.data for camera in cameras]  | 
            |
| 176 | 
                +  | 
            |
| 177 | 
                +    return response(200, 'Get Model Adaptive Camera List Success', u'获取型号适配机身列表成功', {
               | 
            |
| 178 | 
                + 'cameras': cameras,  | 
            |
| 179 | 
                + 'count': count,  | 
            |
| 180 | 
                + 'left': left,  | 
            |
| 181 | 
                + })  | 
            
                @@ -259,6 +259,7 @@ urlpatterns += [  | 
            ||
| 259 | 259 | 
                url(r'^model/delete$', model_views.model_delete, name='model_delete'),  | 
            
| 260 | 260 | 
                url(r'^model/update$', model_views.model_update, name='model_update'),  | 
            
| 261 | 261 | 
                url(r'^model/list$', model_views.model_list, name='model_list'),  | 
            
| 262 | 
                + url(r'^model/cameras$', model_views.model_cameras, name='model_cameras'),  | 
            |
| 262 | 263 | 
                ]  | 
            
| 263 | 264 | 
                 | 
            
| 264 | 265 | 
                urlpatterns += [  | 
            
                @@ -9,7 +9,7 @@ from django_models_ext import ProvinceShortModelMixin  | 
            ||
| 9 | 9 | 
                from pysnippets.strsnippets import strip  | 
            
| 10 | 10 | 
                 | 
            
| 11 | 11 | 
                from mch.models import (ActivityInfo, AdministratorInfo, BrandInfo, ConsumeInfoSubmitLogInfo, DistributorInfo,  | 
            
| 12 | 
                - LatestAppInfo, LatestAppScreenInfo, ModelInfo, OperatorInfo, SaleclerkInfo)  | 
            |
| 12 | 
                + LatestAppInfo, LatestAppScreenInfo, ModelInfo, ModelCameraBodyInfo, OperatorInfo, SaleclerkInfo)  | 
            |
| 13 | 13 | 
                from utils.redis.rshot import update_member_shot_data  | 
            
| 14 | 14 | 
                 | 
            
| 15 | 15 | 
                 | 
            
                @@ -88,6 +88,10 @@ class ModelInfoAdmin(DeleteModelAdmin, admin.ModelAdmin):  | 
            ||
| 88 | 88 | 
                update_member_shot_data()  | 
            
| 89 | 89 | 
                 | 
            
| 90 | 90 | 
                 | 
            
| 91 | 
                +class ModelCameraBodyInfoAdmin(DeleteModelAdmin, admin.ModelAdmin):  | 
            |
| 92 | 
                +    list_display = ('brand_id', 'brand_name', 'model_name', 'model_full_name', 'camera_name', 'status', 'created_at', 'updated_at')
               | 
            |
| 93 | 
                +  | 
            |
| 94 | 
                +  | 
            |
| 91 | 95 | 
                class ModelImageInfoAdmin(admin.ModelAdmin):  | 
            
| 92 | 96 | 
                     list_display = ('model_id', 'model_name', 'image', 'url', 'position', 'status', 'created_at', 'updated_at')
               | 
            
| 93 | 97 | 
                     list_filter = ('model_name', 'status')
               | 
            
                @@ -201,6 +205,7 @@ admin.site.register(AdministratorInfo, AdministratorInfoAdmin)  | 
            ||
| 201 | 205 | 
                admin.site.register(OperatorInfo, OperatorInfoAdmin)  | 
            
| 202 | 206 | 
                admin.site.register(BrandInfo, BrandInfoAdmin)  | 
            
| 203 | 207 | 
                admin.site.register(ModelInfo, ModelInfoAdmin)  | 
            
| 208 | 
                +admin.site.register(ModelCameraBodyInfo, ModelCameraBodyInfoAdmin)  | 
            |
| 204 | 209 | 
                # admin.site.register(ModelImageInfo, ModelImageInfoAdmin)  | 
            
| 205 | 210 | 
                admin.site.register(DistributorInfo, DistributorInfoAdmin)  | 
            
| 206 | 211 | 
                admin.site.register(SaleclerkInfo, SaleclerkInfoAdmin)  | 
            
                @@ -0,0 +1,33 @@  | 
            ||
| 1 | 
                +# -*- coding: utf-8 -*-  | 
            |
| 2 | 
                +# Generated by Django 1.11.27 on 2020-02-22 07:25  | 
            |
| 3 | 
                +from __future__ import unicode_literals  | 
            |
| 4 | 
                +  | 
            |
| 5 | 
                +from django.db import migrations, models  | 
            |
| 6 | 
                +  | 
            |
| 7 | 
                +  | 
            |
| 8 | 
                +class Migration(migrations.Migration):  | 
            |
| 9 | 
                +  | 
            |
| 10 | 
                + dependencies = [  | 
            |
| 11 | 
                +        ('mch', '0042_auto_20200113_1832'),
               | 
            |
| 12 | 
                + ]  | 
            |
| 13 | 
                +  | 
            |
| 14 | 
                + operations = [  | 
            |
| 15 | 
                + migrations.CreateModel(  | 
            |
| 16 | 
                + name='ModelCameraBodyInfo',  | 
            |
| 17 | 
                + fields=[  | 
            |
| 18 | 
                +                ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
               | 
            |
| 19 | 
                +                ('status', models.BooleanField(db_index=True, default=True, help_text='Status', verbose_name='status')),
               | 
            |
| 20 | 
                +                ('created_at', models.DateTimeField(auto_now_add=True, help_text='Create Time', verbose_name='created_at')),
               | 
            |
| 21 | 
                +                ('updated_at', models.DateTimeField(auto_now=True, help_text='Update Time', verbose_name='updated_at')),
               | 
            |
| 22 | 
                +                ('brand_id', models.CharField(blank=True, db_index=True, help_text='\u54c1\u724c\u552f\u4e00\u6807\u8bc6', max_length=32, null=True, verbose_name='brand_id')),
               | 
            |
| 23 | 
                +                ('brand_name', models.CharField(blank=True, help_text='\u54c1\u724c\u540d\u79f0', max_length=255, null=True, verbose_name='brand_name')),
               | 
            |
| 24 | 
                +                ('model_name', models.CharField(blank=True, help_text='\u578b\u53f7\u540d\u79f0', max_length=32, null=True, verbose_name='model_name')),
               | 
            |
| 25 | 
                +                ('model_full_name', models.CharField(blank=True, help_text='\u578b\u53f7\u5168\u540d\u79f0', max_length=255, null=True, verbose_name='model_full_name')),
               | 
            |
| 26 | 
                +                ('camera_name', models.CharField(blank=True, help_text='\u673a\u8eab\u540d\u79f0', max_length=255, null=True, verbose_name='camera_name')),
               | 
            |
| 27 | 
                + ],  | 
            |
| 28 | 
                +            options={
               | 
            |
| 29 | 
                + 'verbose_name': '\u578b\u53f7\u673a\u8eab\u9002\u914d\u4fe1\u606f',  | 
            |
| 30 | 
                + 'verbose_name_plural': '\u578b\u53f7\u673a\u8eab\u9002\u914d\u4fe1\u606f',  | 
            |
| 31 | 
                + },  | 
            |
| 32 | 
                + ),  | 
            |
| 33 | 
                + ]  | 
            
                @@ -283,6 +283,31 @@ class ModelImageInfo(BaseModelMixin):  | 
            ||
| 283 | 283 | 
                }  | 
            
| 284 | 284 | 
                 | 
            
| 285 | 285 | 
                 | 
            
| 286 | 
                +class ModelCameraBodyInfo(BaseModelMixin):  | 
            |
| 287 | 
                + brand_id = models.CharField(_(u'brand_id'), max_length=32, blank=True, null=True, help_text=u'品牌唯一标识', db_index=True)  | 
            |
| 288 | 
                + brand_name = models.CharField(_(u'brand_name'), max_length=255, blank=True, null=True, help_text=u'品牌名称')  | 
            |
| 289 | 
                +  | 
            |
| 290 | 
                + model_name = models.CharField(_(u'model_name'), max_length=32, blank=True, null=True, help_text=u'型号名称')  | 
            |
| 291 | 
                + model_full_name = models.CharField(_(u'model_full_name'), max_length=255, blank=True, null=True, help_text=u'型号全名称')  | 
            |
| 292 | 
                +  | 
            |
| 293 | 
                + camera_name = models.CharField(_(u'camera_name'), max_length=255, blank=True, null=True, help_text=u'机身名称')  | 
            |
| 294 | 
                +  | 
            |
| 295 | 
                + class Meta:  | 
            |
| 296 | 
                + verbose_name = _(u'型号机身适配信息')  | 
            |
| 297 | 
                + verbose_name_plural = _(u'型号机身适配信息')  | 
            |
| 298 | 
                +  | 
            |
| 299 | 
                + def __unicode__(self):  | 
            |
| 300 | 
                + return unicode(self.pk)  | 
            |
| 301 | 
                +  | 
            |
| 302 | 
                + @property  | 
            |
| 303 | 
                + def data(self):  | 
            |
| 304 | 
                +        return {
               | 
            |
| 305 | 
                + 'model_name': self.model_name,  | 
            |
| 306 | 
                + 'model_full_name': self.model_full_name,  | 
            |
| 307 | 
                + 'camera_name': self.camera_name,  | 
            |
| 308 | 
                + }  | 
            |
| 309 | 
                +  | 
            |
| 310 | 
                +  | 
            |
| 286 | 311 | 
                class DistributorInfo(BaseModelMixin):  | 
            
| 287 | 312 | 
                brand_id = models.CharField(_(u'brand_id'), max_length=32, blank=True, null=True, help_text=u'品牌唯一标识', db_index=True)  | 
            
| 288 | 313 | 
                brand_name = models.CharField(_(u'brand_name'), max_length=255, blank=True, null=True, help_text=u'品牌名称')  |